'''
目标：-理解，不死记硬背（做好笔记，后续方便使用时查询）
    1、linux命令的使用：为了将来工作中与服务器设备进行交互而准备的技能   --  远程连接/命令的使用
    2、数据库的使用：MySQL（增删改查）   --   重点：查询
一、Linux操作系统
   1、操作系统-os：所有硬件设备组装完成后的第一层软件，能够使用户使用硬件设备的软件
   2、常见分类：
        ① 桌面操作系统：Windows、macOS、Linux
        ② 移动端操作系统：Android（安卓）、iOS（苹果）
        ③ 服务器操作系统：Linux、Windows Server
        ④ 嵌入式操作系统：Android（底层是Linux）
   3、发行版本：
        ① Redhat系列-小红帽：RHEL
                           Centos **
                           Fedora
        ② Debian系列：Debian
                     Ubuntu 乌班图 **
   4、注意事项：
        ① /：根目录是起点，其下面的所有第一层级文件夹不能随便动
             /home：普通用户所在文件夹，可以动，其下面的xsc可以随便动
        ②/root：系统管理员，一级账户，不能随便动，操作后永久生效
        ③/usr：存放安装的软件
        ④/etc：不建议存放可执行文件
        ⑤/var：存放经常变化的文件，如日志文件
   5、远程连接：
        ① 说明：通过远程连接工具，连接到服务器的操作
        ② 条件：服务器的IP地址
               服务器的账号和密码
               确保有网络连接条件
        ③ 工具：finalShell **
               xShell
               putty
               secureCRT
               MobaXterm
        ④ 远程连接基本步骤：入职后，需要向相关人员（运维/开发）获取-服务器IP地址、账号、密码等
                         配合远程连接工具（公司要求工具），配置连接使用服务器
        ⑤ 远程连接操作步骤：打开终端-ifconfig-获取ip地址
                         打开finalshell，上左侧-打开连接服务器-新建（SSH连接）-名称：随意取
                                                                      -主机：ip地址，端口：22（默认）
                                                                      -认证方式：密码
                                                                      -用户名：...
                                                                      -密码：......
                                                                      -确定
                         如果服务器ip地址发生变化，可直接通过修改更新ip地址
            注意：默认下，CentOs7不支持ifconfig，需要安装环境后才可使用，默认可用ip addr
                 一个网络范围内，一般有1-255个ip地址，1和255会分配给入网和出网设备
                 远程使用的ip，末位一定不是1和255，1是本地ip，255是网关
                 在本机上，cmd - ping 服务器ip地址，检查连通性
   6、使用技巧：
         ① 自动补全：输入几个字母，tab（文件名、路径名）
         ② 来回切换，上下键
         ③ 退出执行：ctrl+c
   7、终端命令组成：命令主体 [-选项] [参数]
   8、查询命令： 命令主体 --help
               man 命令主体（使用手册）
   9、cd：
        cd/cd ~：home
        cd ..    上级
        cd -      上次所在目录
   10、相对路径：以.或..开头的路径
       绝对路径：以/或~开头的路径
         注释：.    当前路径下
              ..   上一层目录
              /    根目录
              ~    当前用户的家目录
   11、端口号：类似门牌号，想要连接至服务器，需要使用IP地址，再想获取在服务器上运行程序，需要通过端口号
             同一台服务器，不能有多个程序同时使用一个端口号，运行程序时，如果”端口号被占用“，需找到占用端口号的程序并结束，才能运行目标程序
             常见端口号：
                 http： 80
                 https：443
                 ssh：  22
                 mysql：3306
二、案例：
TODO 案例1：ls、pwd、cd、touch、mkdir、cp、mv、rm

     1、查看当前路径：                  pwd
     2、查看当前目录下的文件、文件夹：     ls
     3、创建adir、bdir、cdir三个文件夹：               mkdir adir bdir cdir   - 查看 ls
     4、切换到adir目录下：                            cd adir  或  cd ./adir   - 查看 pwd
     5、创建文件aa、bb：                              touch aa bb  -查看 ls
     6、切换到home/root目录下：                       cd ~/ cd
     7、创建文件file，并重命名aa：                     touch file、 mv file aa
     8、复制文件aa到adir目录下：                      cp aa adir   -查看 pwd adir
     9、复制文件aa到adir目录下（要求提示是否覆盖）：      cp -i aa adir
     10、复制文件夹bdir到cdir目录下：                  cp -r bdir cdir
     11、移动文件aa到bdir目录下的cdir                  mv aa bdir/cdir
     12、删除bb文件                                  rm -i bb
     13、删除adir文件夹                              rm -ir adir
     14、删除当前目录下所有文件和文件夹                  rm -ri *

TODO 案例2：cat、more、grep、重定向、管道符、clear

     15、将根目录下所有文件的详细信息输出到demo文件中（包含隐藏文件）    ls -al / > demo
     16、直接查看demo文件的内容                                  cat demo
     17、将/usr/bin目录下所有文件的详细信息追加到demo文件中          ls -al /usr/bin >> demo
     18、以分屏的形式查看demo文件的内容                            less -N demo
                                                              more demo     (x：搜索x，q：退出，下一页：空格键，上一页：b)
     19、查看demo文件内容中包含mysql的信息                         ls -al / >demo
                                                              grep mysql demo
     20、在/usr/bin 目录下所有文件的信息中查找包含mysql的信息         ls -al /usr/bin | grep mysql

TODO 案例3：head、tail、tail -f、ping

     21、查看demo文件的前5行、后5行内容                             head -5 demo   tail -5 demo
         《注意：head和tail多用于查看日志文件内容                     =====================================================
              日志文件（一种负责记录系统或程序运行过程信息的文件）  ======
              测试人员可以通过查看日志文件信息，帮助判断bug出现的原因 ====
     22、将ping www.baidu.com 的信息输出追加到 ping_log 文件中       ping www.baidu.com >> ping_log
            ====详细：
                       终端窗口输入：  ping www.baidu.com > demo
                       finalshell： tail -f demo
     23、重新开启一个终端窗口，动态查看 ping_log 文件中的信息            tail -f ping_log              ctrl+c退出
                          动态查看某几行信息                       tail -5f ping_log
         《注意：只要目标文件的内容是一直写入的状态，使用tail -f 文件名，即可实现实时监控文件内容变化的操作  =========================
              动态查看日志文件内容   ==========================================================

TODO 案例4：重启关机、查看系统信息

     24、查看当前系统内核版本信息               cat /proc/version
     25、查看当前系统发行版本信息               cat /etc/redhat-release
            注意：其他系统需获取系统版本信息，可搜索：系统类型+内核版本/发行版本（CentOS内核版本查询）
     26、重启当前系统                         reboot
     27、关闭当前系统                         shutdown
                                           poweroff

TODO 案例5：ps、kill、top

     28、查看当前系统下的所有进程信息      ps -aux
     29、手动打开 nmon_x86_64_centos7                     chmod 755  nmon_x86_64_centos7
                                                        ./nmon_x86_64_centos7
     30、获取 nmon_x86_64_centos7 的进程信息（进程ID）       ps -aux | grep nmon_x86_64_centos7
             xsc      114366  0.0  0.0 112824   976 pts/0    R+   21:06   0:00 grep --color=auto nmon_x86_64_centos7
     31、通过结束 nmon_x86_64_centos7 进程的方式关闭程序      kill -9 114366
            ====详细
                  vm终端：        ./nmon_x86_64_centos7
                  finalshell:    ps -aux | grep nmon （获取./nmon_x86_64_centos7的id）
                                 kill -9 id
                  vm：           显示（killed16p）
     32、打开当前系统的“任务管理器”（动态查看进程信息）           top
         注意： nmon_x86_64_centos7：一种第三方命令行形式的任务管理器，可以获取Linux相关资源信息（CPU、内存、硬盘、网络）
              先下载 nmon_x86_64_centos7（详情见浏览器） - finalshell - 右侧 - 上传
              权限不足：chmod 755 程序名，修改文件权限
              kill -9 进程id：通过进程id关闭对应软件程序（-9 强制结束）
              进程：在任何系统中，软件程序运行时，会有一个对应的进程存在，结束进程，对应软件程序会关闭，尤其在服务系统（Linux）
              PID：进程ID（结束进程，需获取PID数值，一般情况下是唯一的）
              COMMAND：软件程序名称
              %CPU：cpu使用率
              %MEM：内存使用率

TODO 案例6：netstat、lsof

     33、查看当前系统中开放的端口有哪些（用root用户）         netstat -anptu
     34、查看哪个程序正在使用3306端口（root权限）            netstat -anptu | grep 3306
                                                      lsof -i:3306
          注意：配合grep过滤信息，获取占用某一端口号的程序名及对应的进程ID，再使用kill结束端口占用

TODO 案例7：which、su、passwd、exit、who

     35、查看mysql程序的存放位置                            which mysql
     36、从普通用户切换到root用户                           输入su -，密码：xsc921101     （su：/home/xsc    su - ：/root）
     37、从root用户切换回普通用户                           su - xsc
     38、查看当前用户信息                                  whoami
     39、查看当前系统中所有登录用户的信息                     who -q
     40、退出当前终端窗口                                  终端窗口：           exit（关闭终端）
                                                        远程工具finalshell：exit（断开连接）
                                                        远程工具切换用户后：  exit（退出当前用户）

     41、查看demo文件第11-15行信息        cat demo -n               （按顺序查看demo文件）
                                      head -15 demo | tail -5   （先截取前15行，再截取末尾5行）
     42、cat查看合并文件     ls > demo1
                          ls -l > demo2
                          cat demo1 demo2
TODO 案例8：chmod
三、文件权限命令
1、chmod字母法
    u：user，该文件的所有者      +：增加权限       r：可读       4
    g：group，用户组           -：撤销权限       w：可写       2
    o：other其他用户           =：设置权限       x：可执行     1
    a：all，所有用户                           -：无任何权限  0
       注意：尽量不要随意赋予文件最高权限：数字法（777）、字母法（rwxrwxrwx）
            建议适当修改文件权限：数字法（755）、字母法（rwxr-xr-x）
            尽量保证拥有者只拥有最高权限rwx，其他用户保留可写w即可

     43、在当前目录下创建文件 cm_demo                                                touch cm_demo
     44、查看文件当前权限状态                                                        ll （等价于ls -l）
     45、使用字母法修改文件权限：拥有者-可读可写、用户组-可写、其他用户-可执行                chmod u=rw,g=w,0=x cm_demo
     46、使用数字法修改文件权限：拥有者-可读可写可执行、用户组-可读可写、其他用户-可写可执行     chmod 763 cm_demo

TODO 案例9：find

     47、在路径下创建 adir、bdir 两个文件夹              mkdir adir bdir
     48、在 adir 目录下创建文件 f_demo                 touch adir/f_demo
     49、切换路径到 bdir 目录下                        cd ./bdir
     50、在当前目录下，从 /root 目录中查找 f_demo 文件    find /root -name f_demo  (find . -name f_demo)
                                                   = find /root -name *mo
                                                   = find /root -name '*mo'
            区别：find-查找普通文件
                 grep-查文件内容，与文件本身无关
                 which-查找可执行程序，不是普通程序

TODO 案例10： ln -s

     51、在当前路径下创建文件demo                                touch demo
     52、给demo文件创建链接文件名为1demo                          ln -s demo 1demo      （显示：1demo -> demo）
            ln-s：软链接，相当于windows下的创建快捷方式，其内容是同步更新的
            ln：  硬链接，类似复制文件
            原文件被删除：软链接失去指向，会失效不可用
                       硬链接因为直接指向内容，不受影响，依然有效可用
     53、修改1demo链接文件的内容                                 ls > 1demo
     54、查看demo文件的内容是否同样变化                            cat demo
     55、修改demo文件内容，查看1demo链接文件内容是否同样变化          ls -l > demo
                                                             cat 1demo

TODO 案例11：tar、gzip、bzip2、zip、unzip

    56、在当前路径下创建atdir、btdir两个文件夹         mkdir atdir btdir
                                                 ls                  -查看文件
    57、在atdir目录下创建aa、bb、cc三个文件           cd atdir            -切换路径
                                                 pwd                 -查看路径
                                                 touch aa bb cc      -创建文件夹
                                                 ls

    58、分别用两种压缩方法对atdir目录进行压缩           cd -                -切换至atdir的上一级路径
                                            ①  tar -zcvf atdir.tar.gz atdir/
                                            ②  tar -cvf  atdir.tar atdir/
                                            ③  zip -r atdir.zip atdir       （目标文件是文件夹，需-r处理文件夹内部的所有文件）
                                                或
                                                zip -r atdir atdir   （压缩包名.zip可省略）
          注意：不要在目标文件夹内部，执行打包压缩文件操作，要返回上一级目录
               Linux中，常用的是 .tar.gz格式
                   -z：gzip压缩
                   -c：打包
                   -v：显示过程
                   -f：指定文件
                   -x：解包
                   -C：用于指定解压目录

    59、分别解压上一步产生的压缩包文件内容至btdir目录下   ①  tar -zxvf atdir.tar.gz -C btdir/
                                                     ls btdir/
                                                 ②  tar -xvf atdir.tar -C btdir/
                                                 ③  unzip -d btdir/ atdir.zip
                                                     或
                                                     unzip atdir.zip  （可以直接在当前目录下解压文件）
                解压文件，出现重名文件提示：
                   y：替换         yes
                   n：不替换        no
                   A：全部替换      All
                   N：什么也不做    None
                   r：改名         rename

TODO 案例12：vi

   60、在当前目录下利用vi命令，创建文件vi_demo并打开        vi vi_demo
   61、修改vi_demo文件内容为：hello linux               i
                                                    hell linux
   62、保存文件内容并退出vi模式                          :wq
   63、查看vi_demo文件内容，确认修改是否完成               cat vi_demo

TODO 案例13：yum命令

   常用命令： yum list                列出所有可安装的软件清单
            yum search 软件包        查找指定
            yum install 软件包       安装指定
            yum update 软件包        更新指定
            yum update              更新所有
            yum remove 软件包        删除指定
'''